# 12.6
# 构造一个数据库study；
# 使用python在上述数据库study内构造一张名称为“hello”的表。
# 使用ORM 技术，表中写入数据；
# 使用ORM 技术，查询表中的数据；
"""
# cat requirment.txt
greenlet==3.2.2
mysql-connector-python==8.0.25
protobuf==6.30.2
SQLAlchemy==1.4.19
typing_extensions==4.13.2
"""
# 创建数据库和表
# create database study;
# create table hello(id varchar(20) primary key, name varchar(20));

from sqlalchemy import Column, create_engine, String, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import random
import string

Base = declarative_base()

class Hello(Base):
    __tablename__ = "hello"
    id = Column(String(20), primary_key=True)
    name = Column(String(50))

# 创建引擎和会话
engine = create_engine("mysql+mysqlconnector://root:@localhost:3306/study")
DBSession = sessionmaker(bind=engine)
session = DBSession()

# 生成随机名字的函数
def generate_random_name():
    first_names = ['欧阳','张', '李', '王', '赵', '刘', '陈', '杨', '黄', '周', '吴']
    last_names = ['伟国', '雪雪', '娜娜', '秀英', '敏宏', '静静', '丽丽', '强', '磊', '军']
    return random.choice(first_names) + random.choice(last_names)

# 批量生成10000条数据
records = []
for i in range(1, 10001):
    # 生成ID，格式为10000开始
    record_id = str(10000 + i)
    # 生成随机名字
    record_name = generate_random_name()
    records.append(Hello(id=record_id, name=record_name))

# 分批插入数据（每次1000条）
batch_size = 1000
for i in range(0, len(records), batch_size):
    batch = records[i:i + batch_size]
    session.bulk_save_objects(batch)
    session.commit()  # 每批提交一次
    print(f"已插入 {i + batch_size if (i + batch_size) < len(records) else len(records)} 条记录")

# 查询验证
count = session.query(Hello).count()
print(f"数据库中共有 {count} 条记录")

session.close()